package m202401.d05;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
import java.util.stream.Collectors;

/**
 * @@author: 爱做梦的锤子
 * @date: 2024/1/5 09:52
 */
//224. 基本计算器
public class Q224 {

    public static void main(String[] args) {
        int calculate = new Q224()
                .calculate("1 + 1");
        System.out.println(calculate);
    }

    public int calculate(String s) {
        Stack<Boolean> flag = new Stack<>();
        List<Integer> list = new ArrayList<>();
        flag.push(true);
        boolean cFlag = true;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                continue;
            }
            if (c >= '0' && c <= '9') {
                sb.append(c);
                continue;
            }
            if (!sb.isEmpty()) {
                String num = cFlag ? sb.toString() : "-" + sb.toString();
                list.add(Integer.parseInt(num));
                sb.delete(0, sb.length());
            }

            if (c == '-') {
                cFlag = !flag.peek();
            } else if (c == '+') {
                cFlag = flag.peek();
            } else if (c == '(') {
                flag.push(cFlag);
            } else if (c == ')') {
                flag.pop();
            }
        }
        if (!sb.isEmpty()) {
            list.add(Integer.parseInt(cFlag ? sb.toString() : "-" + sb));
        }
        return list.stream().mapToInt(x -> x).sum();
    }

//    public int calculate(String s) {
//        Stack<String> stack = new Stack<>();
//        StringBuilder sb = new StringBuilder();
//        for (int i = 0; i < s.length(); i++) {
//            char c = s.charAt(i);
//            if (c == ' ') {
//                continue;
//            }
//            if (c >= '0' && c <= '9') {
//                sb.append(c);
//                continue;
//            }
//            if (!sb.isEmpty()) {
//                stack.push(sb.toString());
//                sb.delete(0, sb.length());
//            }
//            if (c != ')') {
//                stack.push(String.valueOf(c));
//            } else {
//                LinkedList<String> temp = new LinkedList<>();
//                while (!stack.lastElement().equals("(")) {
//                    temp.addFirst(stack.pop());
//                }
//                stack.pop();
//                stack.push(String.valueOf(calc(temp)));
//            }
//        }
//        if (!sb.isEmpty()) {
//            stack.push(sb.toString());
//        }
//        return calc(stack);
//    }
//
//    private int calc(List<String> list) {
//        int rs = 0;
//        String last = "+";
//        for (String s1 : list) {
//            if (s1.equals("+") || s1.equals("-")) {
//                last = s1;
//                continue;
//            }
//            if (last.equals("+")) {
//                rs = rs + Integer.parseInt(s1);
//            } else {
//                rs = rs - Integer.parseInt(s1);
//            }
//        }
//        return rs;
//    }
}
